package com.bdqn.easybuy1.dao.impl;

import com.bdqn.easybuy1.dao.BaseDao;
import com.bdqn.easybuy1.dao.OrderDao;
import com.bdqn.easybuy1.entities.Order;
import com.bdqn.easybuy1.utils.EmptyUtils;

import java.sql.Connection;
import java.util.ArrayList;
import java.util.List;

public class OrderDaoImpl extends BaseDao<Order> implements OrderDao {
    /**
     * 添加订单
     *
     * @param order 保存订单信息
     * @return 受影响的行数
     */
    @Override
    public int insert(Connection conn, Order order) throws Exception {
        String sql = "INSERT INTO `easybuy_order`(`userId`,`loginName`,`userAddress`,`createTime`,`cost`,`serialNumber`) " +
                " VALUES (?,?,?,?,?,?)";
        // 获取主键，然后把主键存在order对象中
        Long keyId = super.insert(conn, sql,
                order.getUserId(),
                order.getLoginName(),
                order.getUserAddress(),
                order.getCreateTime(),
                order.getCost(),
                order.getSerialNumber());

        order.setId(keyId.intValue());

        return 1;
    }

    /**
     * 根据ID删除订单
     *
     * @param id 要删除的订单ID
     * @return 受影响的行数
     */
    @Override
    public int deleteById(Connection conn, Integer id) throws Exception {
        String sql = "DELETE FROM `easybuy_order` WHERE `id` = ?";
        return super.update(conn, sql, id);
    }

    /**
     * 根据ID得到一个订单对象
     *
     * @param id 要查询的订单ID
     * @return 订单对象
     * @throws Exception
     */
    @Override
    public Order getOrderById(Connection conn, Integer id) throws Exception {
        String sql = "SELECT * FROM `easybuy_order` WHERE `id` = ?";
        return super.getBean(conn, sql, id);
    }

    /**
     * 分页查询订单
     *
     * @param userId     用户ID
     * @param startIndex 开始索引，从0开始
     * @param pageSize   每页显示的数据条数
     * @return
     * @throws Exception
     */
    @Override
    public List<Order> getOrderList(Connection conn, Integer userId, Integer startIndex, Integer pageSize) throws Exception {
        // 肯定要进行分页
        // ①、SQL语句
        String sql = "SELECT `id`,`userId`,`loginName`,`userAddress`,`createTime`,`cost`,`serialNumber` from `easybuy_order` where 1=1 ";

        // ②、保存拼接的参数
        List<Object> objParams = new ArrayList<>();

        // ③、需要根据params参数来拼接查询参数
        StringBuilder sb = new StringBuilder(sql);

        if (EmptyUtils.isNotEmpty(userId)) {
            sb.append(" AND `userId` = ?");
            objParams.add(userId);
        }

        // 这里只查询，不做分页的逻辑
        sb.append(" LIMIT " + startIndex + "," + pageSize);

        return getBeanList(conn, sb.toString(), objParams.toArray());
    }

    /**
     * 查询订单条数
     *
     * @param userId 用户ID
     * @return 查询到的数据条数
     */
    @Override
    public Integer getOrderCount(Connection conn, Integer userId) {
        // 肯定要进行分页
        // ①、SQL语句
        String sql = "SELECT COUNT(*) from `easybuy_order` where 1 = 1 ";

        // ②、保存拼接的参数
        List<Object> objParams = new ArrayList<>();

        // ③、需要根据params参数来拼接查询参数
        StringBuilder sb = new StringBuilder(sql);

        if (EmptyUtils.isNotEmpty(userId)) {
            sb.append(" AND `userId` = ?");
            objParams.add(userId);
        }

        Long retVal = getValue(conn, sb.toString(), objParams.toArray());

        return retVal.intValue();
    }
}
